﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Microsoft.Phone.Controls;
using ProntuarioEletronicoMobile.Repositorio;
using ProntuarioEletronicoMobile.Banco;
using System.Windows.Navigation;

namespace ProntuarioEletronicoMobile
{
    public partial class VisualizadorProtuario : PhoneApplicationPage
    {
        private const string strConnectionString = @"isostore:/PacienteDB.sdf";

        private int id_paciente;
        private int id_prontuario = -1;

        public VisualizadorProtuario()
        {
            InitializeComponent();
        }

        // When page is navigated to set data context to selected item in list
        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            string paciente_id = "";
            if (NavigationContext.QueryString.TryGetValue("paciente_id", out paciente_id))
            {
                id_paciente = int.Parse(paciente_id);
            }
        }

        private void LayoutRoot_Loaded(object sender, RoutedEventArgs e)
        {
            Criar_BD();

            PacienteDataContext pacientes_db = new PacienteDataContext(strConnectionString);

            lbDadosPaciente.ItemsSource = pacientes_db.CarregarPaciente(id_paciente);
            lbAnamnese.ItemsSource = GetProntuario(id_paciente);
            lbExameFisico.ItemsSource = GetProntuario(id_paciente);
            lbExames.ItemsSource = ListarExames(id_prontuario);
            lbProcedimentos.ItemsSource = ListarProcedimentos(id_prontuario);
            lbSaida.ItemsSource = GetProntuario(id_paciente);
        }

        

        private void Criar_BD()
        {
            //Criando Banco Prontuário
            using (ProntuarioDataContext prontuario_bd = new ProntuarioDataContext(@"isostore:/ProntuarioDB.sdf"))
            {
                if (prontuario_bd.DatabaseExists() == false)
                {
                    prontuario_bd.CreateDatabase();
                }
            }
            //Criando Banco Procedimento
            using (ProcedimentoDataContext procedimento_bd = new ProcedimentoDataContext(@"isostore:/ProcedimentoDB.sdf"))
            {
                if (procedimento_bd.DatabaseExists() == false)
                {
                    procedimento_bd.CreateDatabase();
                }
            }
            //Criando Banco Procedimento
            using (ExameDataContext exame_bd = new ExameDataContext(@"isostore:/ExameDB.sdf"))
            {
                if (exame_bd.DatabaseExists() == false)
                {
                    exame_bd.CreateDatabase();
                    //Popular Banco
                    PopularBanco();
                }
            }
        }

        private void PopularBanco() 
        {
            using (ProntuarioDataContext prontuario_bd = new ProntuarioDataContext(@"isostore:/ProntuarioDB.sdf"))
            {
                //Prontuário Paciente 00 - Gustavo
                Prontuario prontuarioGustavo = new Prontuario
                {
                    //Anamnese
                    IDProntuario = 0,
                    IDPaciente = 0,
                    QueixaPrincipal = "Dor de Garganta e Febre.",
                    HistoricoDaDoenca = "Dor de Garganta que causou febre fazem três dias.",
                    HistoricoPaciente = "Nenhuma doença grave.",
                    HistoricoFamiliar = "Sem doenças graves na família.",
                    HistoricoPessoal = "Trabalha no ar-condicionado, sentado, em um escritório. Pratica esporte regularmente.",
                    RevisaoDoSistema = "Dor ao falar e ao engulir. Dificuldade para se alimentar",
                    Alergia = "Nada", TipoAlergia = "0", Comentario = "Nada",
                    //Exame Físico
                    PressaoArterial = "12/8", Temperatura = "39ºC",
                    Peso = "70 KG", Estetoscopio = "Normal", Altura = "1,70 M",
                    ResultadoInspecao = "Local levemente inflamado",
                    ResultadoAusculta = "Resultado",
                    ResultadoPalpacao = "Resultado",
                    ResultadoPercussao = "Resultado",
                    //Saída
                    DataHoraSaida = DateTime.Today.ToString(),
                    TipoSaida = "Normal",
                    Condicao = "Normal"
                };
                prontuario_bd.Prontuarios.InsertOnSubmit(prontuarioGustavo);
                prontuario_bd.SubmitChanges();
            }
            
            //Procedimento
            using (ProcedimentoDataContext procedimentos_bd = new ProcedimentoDataContext(@"isostore:/ProcedimentoDB.sdf")) 
            {
                //Procedimento do Prontuário 00
                Procedimento procedimentoGustavo = new Procedimento
                {
                    IDProcedimento = 0,
                    IDProntuario = 0,
                    NomeProcedimento = "Receita dos Medicamentos",
                    DataHoraProcedimento = DateTime.Today.ToString(),
                    DescricaoProcedimento = "Medicação: NEOPIRIRDIN pastilhas, de 3 em 3h.",
                    ProcedimentoRealizadoPor = "Dra. Anita Macedo - CRM 2356",
                    ProcedimentoSupervisionadoPor = "Dr. Antônio Costa - CRM 1756"
                };

                procedimentos_bd.Procedimentos.InsertOnSubmit(procedimentoGustavo);
                procedimentos_bd.SubmitChanges();
            }

            //Exames
            using (ExameDataContext exame_bd = new ExameDataContext(@"isostore:/ExameDB.sdf"))
            {
                Exame examesGustavo = new Exame
                {
                    IDExame = 0,
                    IDProntuario = 0,
                    NomeExame = "Laringoscopia",
                    DataHoraExame = DateTime.Today.ToString(),
                    Resultado = "Inflamação da Laringe",
                    HipoteseDiagnostica = "Inflamação na Laringe",
                    Diagnostico = "Inflamação da Laringe",
                    ExameRealizadoPor = "Dra Ângela Maria - CRM 2341"
                };

                exame_bd.Exames.InsertOnSubmit(examesGustavo);
                exame_bd.SubmitChanges();
            }
        }

        private IList<Prontuario> GetProntuario(int id_paciente) 
        {
            //Listando Valores do Banco de Dados
            IList<Prontuario> ListaDeProntuarios = null;
            using (ProntuarioDataContext prontuario_bd = new ProntuarioDataContext(@"isostore:/ProntuarioDB.sdf"))
            {
                IQueryable<Prontuario> ProntuarioQuery = from prontuario in prontuario_bd.Prontuarios where prontuario.IDPaciente == id_paciente select prontuario;
                ListaDeProntuarios = (IList<Prontuario>)ProntuarioQuery.ToList();
            }

            if (ListaDeProntuarios.Count > 0)
            {
                Prontuario prontuario_exibido = ListaDeProntuarios.ElementAt(0);
                id_prontuario = prontuario_exibido.IDPaciente;
                return ListaDeProntuarios;
            }
            else
            {
                return new List<Prontuario>();
            }
        }

        private IList<Exame> ListarExames(int id_prontuario)
        {
            //Listando os valores do Banco de Dados
            IList<Exame> listaDeExames = null;
            using (ExameDataContext exame_bd = new ExameDataContext(@"isostore:/ExameDB.sdf")) 
            {
                IQueryable<Exame> ExameQuery = from exame in exame_bd.Exames where exame.IDProntuario == id_prontuario select exame;
                listaDeExames = (IList<Exame>)ExameQuery.ToList();
            }
            return listaDeExames;
        }

        private IList<Procedimento> ListarProcedimentos(int id_prontuario)
        {
            //Listando os valores do Banco de Dados
            IList<Procedimento> listaDeProcedimento = null;
            using (ProcedimentoDataContext procedimento_bd = new ProcedimentoDataContext(@"isostore:/ProcedimentoDB.sdf"))
            {
                IQueryable<Procedimento> ProcedimentoQuery = from procedimento in procedimento_bd.Procedimentos where procedimento.IDProntuario == id_prontuario select procedimento;
                listaDeProcedimento = (IList<Procedimento>)ProcedimentoQuery.ToList();
            }
            return listaDeProcedimento;
        }

        private void lbDadosPaciente_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (lbDadosPaciente.SelectedIndex != -1) 
            {
                lbDadosPaciente.SelectedIndex = -1;
                return;
            }
        }

        private void lbAnamnese_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (lbAnamnese.SelectedIndex != -1)
            {
                lbAnamnese.SelectedIndex = -1;
                return;
            }
        }

        private void lbExameFisico_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (lbExameFisico.SelectedIndex != -1)
            {
                lbExameFisico.SelectedIndex = -1;
                return;
            }
        }

        private void lbExames_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (lbExames.SelectedIndex != -1)
            {
                lbExames.SelectedIndex = -1;
                return;
            }
        }

        private void lbProcedimentos_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (lbProcedimentos.SelectedIndex != -1)
            {
                lbProcedimentos.SelectedIndex = -1;
                return;
            }
        }

        private void lbSaida_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (lbSaida.SelectedIndex != -1)
            {
                lbSaida.SelectedIndex = -1;
                return;
            }
        }

        private void enviar_click(object sender, System.EventArgs e)
        {
            List<Paciente> pacientes = (List<Paciente>)lbDadosPaciente.ItemsSource;
            Paciente paciente = pacientes.ElementAt<Paciente>(0);

			NavigationService.Navigate(new Uri("/Compartilhar.xaml?paciente_id="+paciente.IDPaciente, UriKind.Relative));
        }
    }
}